{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src='http://hilpisch.com/taim_logo.png' width=\"350px\" align=\"right\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Artificial Intelligence in Finance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## AI-First Finance"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dr Yves J Hilpisch | The AI Machine\n",
    "\n",
    "http://aimachine.io | http://twitter.com/dyjh"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Efficient Markets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from pylab import plt, mpl\n",
    "plt.style.use('seaborn')\n",
    "mpl.rcParams['savefig.dpi'] = 300\n",
    "mpl.rcParams['font.family'] = 'serif'\n",
    "pd.set_option('precision', 4)\n",
    "np.set_printoptions(suppress=True, precision=4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "url = 'http://hilpisch.com/aiif_eikon_eod_data.csv'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(url, index_col=0, parse_dates=True).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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+NjHPkZDQwN33HEHdXV1p7XV5oUXXqC4uJibb76ZxsZGVFXFtm3g9HrGnn76aS6//HIqKir43ve+x+zZsykpKZnsZp0UhmHw05/+FF3X+fKXv4zruvT39092s04KwzC4/fbbKSgo4NOf/jSapvHzn/+cQ4cOnXZz5Oky1582CpTrutx3333Mnj2b8vJyrrzySmbMmMHPfvYzgCmllY7HYMcnEgm++tWvUlxczP/+7/8Cp6f/QGFhITU1NSxfvpza2lrOPvts9uzZM9nNOilqamooKSlh9erVVFRUUFBQgKIopNPp0+LZGkQIMWRl6unp4ZxzziESiXDPPffQ19d3WslSX1/PypUrWbJkCXfeeSf/+7//y1e+8hXuu+++yW7ahBBCIITgkUceQZIk7r33Xv7617/yrW99i5/85CfA6TF+DbJ06VI+9KEP8d73vpeioiKEEDzxxBOT3ayT5m9/+xt1dXVUVFQQi8Vobm6mubl5sps1YRzH4e6776axsZGKigpWrlxJX18fv/nNb4Cp/4yNXPjde++9p8VcP2UVqObmZn7/+9+TSqUAkGWZhQsX8sMf/hCAiooKLrnkEjKZDPv375/Mph6TkXIMdvyyZcsoKSnh2muv5fbbb6e3txdFUaa8EjUoSzKZBLw+eM973jMkV11dHatWrQKmvk/U0c9XKBTi+uuvBzxLQTwep6mpiS984Qs8++yzk9nU43L0M+Y4DpZlUVlZyVve8hZqa2u54447+OUvfwlMXWvH0X0SDAY555xzuO222zj33HP59Kc/TWNjIw899NCUt3Qe3SeSJDF79my+/e1vs2jRIm644QbOP/98NmzYwMaNGye7ucfk6H6JRCK8733vA7xJr76+fmjbfqo+W4McLUsgEODKK6/klltu4bOf/SyWZeE4Dl/84henvFJ4tCzhcJhVq1bxjW98A4Dq6mrWrVtHMpmkvb19Mpt6THp6erjlllu49dZbeeGFF1AUhblz554Wc/2UVKBM0+SnP/0pDz74IA8//PDQ529605tobW3liSeeQJIkKisrKSwspKCgYBJbOz7jyRGJRAA477zzWLlyJbfccgvg+UhMVUbK8sgjjwDe4DPy3u/fv5/ly5fT1NTEPffcM1lNPS7j9cugLPPmzeMb3/gG119/PfX19VPapD+WLIqioGkamzdv5p577qG3t5fGxkYcx+HAgQNTagU3yHh9ct555/G+972PmpoaAC699FJCoRDBYHCymnpcjiVLU1MT27dvB+Dss8/mrLPOQlWnrivqeLLoug54C9u+vj6efvppYGpZB45mPFluvPFGbrjhBmbMmMHnPvc5rr32WlavXj2lgxbGk+WTn/wkra2t/PCHP+RPf/oTK1asoKKigsLCwkls7dgIIfjrX//Kb3/7W9atW0c0GuWTn/wkAG9729toaWmZ8nP9lFSgLMti7ty5rF27li1btgyZU+vq6rj66qv52te+hmmadHd34zjOlH1px5NjpKXpM5/5DH/4wx/44he/OKUjDo4nSzqdJplM8sgjj/DlL38ZXden7Gp0PFkG2zuoyG7bto39+/cza9asSWvr8RhPlr6+PqZNm0ZZWRn/7//9PxobG3nggQd44YUXpmS/jCcHQGNjI4cOHQK8qMJ0Ok04HJ6sph6X8WSZPn061157LT/4wQ8Az++ura2NioqKyWzuMTnWuzL4HF188cWEw+Epb0E/1jPW1NTEX/7yFwBefPFF9u7de1q+92VlZdx+++1cc801fOITn6C2tpZIJDIl+yaRSNDZ2ck//MM/cM455/C+972P1atX09HRwaxZs3jrW9865ed6SUyB0bSpqYmHHnqItWvX0tDQQCQSwXEcdu3axe9+9zsaGxv5wAc+MHT89773vaF/v+Md75gyA9BE5BBCYJomTz75JE888QQf+MAHptQLO9E+efjhh/n85z/PNddcwzXXXMPs2bMnr/FHMRFZcrkcd9xxB7t372blypWsXr2aqqqqyRVgBBORJR6PU1hYSDKZ5LHHHmPJkiXU1dVNrgADTPRd+e53v0tzczOrV6/mvPPOY9q0aZMrwAgm+q5885vfRNM0QqEQV199NZWVlZPX+KOYqCwADz30ENlslje96U2T0+hxmIgs/f39fOUrXyEQCDBv3jyuuOKK07pfHn/8cR544AEWLVrE61//esrLyyev8SMYKceCBQvYsWMHs2fPJhQK0dLSwq9+9Su+9KUvDUUMf//738d1XSRJmlJz/SCTpkANhiP+9re/JZVKUVNTw/PPP082mx2KTgO47bbb2Lt3Lx/4wAdoaGgY+ty27Slh+n4lcti2TSqVoqioaJJan88rkWXTpk20t7fzxje+cbKan8crkeXgwYP09vayfPnyyWp+HhOV5f3v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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "(data / data.iloc[0]).plot(figsize=(10, 6), cmap='coolwarm');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "lags = 7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_lags(data, ric, lags):\n",
    "    cols = []\n",
    "    df = pd.DataFrame(data[ric])\n",
    "    for lag in range(1, lags + 1):\n",
    "        col = 'lag_{}'.format(lag)\n",
    "        df[col] = df[ric].shift(lag)\n",
    "        cols.append(col)\n",
    "    df.dropna(inplace=True)\n",
    "    return df, cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfs = {}\n",
    "for sym in data.columns:\n",
    "    df, cols = add_lags(data, sym, lags)\n",
    "    dfs[sym] = df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>GLD</th>\n",
       "      <th>lag_1</th>\n",
       "      <th>lag_2</th>\n",
       "      <th>lag_3</th>\n",
       "      <th>lag_4</th>\n",
       "      <th>lag_5</th>\n",
       "      <th>lag_6</th>\n",
       "      <th>lag_7</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010-01-13</th>\n",
       "      <td>111.54</td>\n",
       "      <td>110.49</td>\n",
       "      <td>112.85</td>\n",
       "      <td>111.37</td>\n",
       "      <td>110.82</td>\n",
       "      <td>111.51</td>\n",
       "      <td>109.70</td>\n",
       "      <td>109.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-14</th>\n",
       "      <td>112.03</td>\n",
       "      <td>111.54</td>\n",
       "      <td>110.49</td>\n",
       "      <td>112.85</td>\n",
       "      <td>111.37</td>\n",
       "      <td>110.82</td>\n",
       "      <td>111.51</td>\n",
       "      <td>109.70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-15</th>\n",
       "      <td>110.86</td>\n",
       "      <td>112.03</td>\n",
       "      <td>111.54</td>\n",
       "      <td>110.49</td>\n",
       "      <td>112.85</td>\n",
       "      <td>111.37</td>\n",
       "      <td>110.82</td>\n",
       "      <td>111.51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-19</th>\n",
       "      <td>111.52</td>\n",
       "      <td>110.86</td>\n",
       "      <td>112.03</td>\n",
       "      <td>111.54</td>\n",
       "      <td>110.49</td>\n",
       "      <td>112.85</td>\n",
       "      <td>111.37</td>\n",
       "      <td>110.82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-20</th>\n",
       "      <td>108.94</td>\n",
       "      <td>111.52</td>\n",
       "      <td>110.86</td>\n",
       "      <td>112.03</td>\n",
       "      <td>111.54</td>\n",
       "      <td>110.49</td>\n",
       "      <td>112.85</td>\n",
       "      <td>111.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-21</th>\n",
       "      <td>107.37</td>\n",
       "      <td>108.94</td>\n",
       "      <td>111.52</td>\n",
       "      <td>110.86</td>\n",
       "      <td>112.03</td>\n",
       "      <td>111.54</td>\n",
       "      <td>110.49</td>\n",
       "      <td>112.85</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-22</th>\n",
       "      <td>107.17</td>\n",
       "      <td>107.37</td>\n",
       "      <td>108.94</td>\n",
       "      <td>111.52</td>\n",
       "      <td>110.86</td>\n",
       "      <td>112.03</td>\n",
       "      <td>111.54</td>\n",
       "      <td>110.49</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               GLD   lag_1   lag_2   lag_3   lag_4   lag_5   lag_6   lag_7\n",
       "Date                                                                      \n",
       "2010-01-13  111.54  110.49  112.85  111.37  110.82  111.51  109.70  109.80\n",
       "2010-01-14  112.03  111.54  110.49  112.85  111.37  110.82  111.51  109.70\n",
       "2010-01-15  110.86  112.03  111.54  110.49  112.85  111.37  110.82  111.51\n",
       "2010-01-19  111.52  110.86  112.03  111.54  110.49  112.85  111.37  110.82\n",
       "2010-01-20  108.94  111.52  110.86  112.03  111.54  110.49  112.85  111.37\n",
       "2010-01-21  107.37  108.94  111.52  110.86  112.03  111.54  110.49  112.85\n",
       "2010-01-22  107.17  107.37  108.94  111.52  110.86  112.03  111.54  110.49"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfs[sym].head(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "regs = {}\n",
    "for sym in data.columns:\n",
    "    df = dfs[sym]\n",
    "    reg = np.linalg.lstsq(df[cols], df[sym], rcond=-1)[0]\n",
    "    regs[sym] = reg"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "rega = np.stack(tuple(regs.values()))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "regd = pd.DataFrame(rega, columns=cols, index=data.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>lag_1</th>\n",
       "      <th>lag_2</th>\n",
       "      <th>lag_3</th>\n",
       "      <th>lag_4</th>\n",
       "      <th>lag_5</th>\n",
       "      <th>lag_6</th>\n",
       "      <th>lag_7</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>AAPL.O</th>\n",
       "      <td>1.0106</td>\n",
       "      <td>-0.0592</td>\n",
       "      <td>0.0258</td>\n",
       "      <td>0.0535</td>\n",
       "      <td>-0.0172</td>\n",
       "      <td>0.0060</td>\n",
       "      <td>-0.0184</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MSFT.O</th>\n",
       "      <td>0.8928</td>\n",
       "      <td>0.0112</td>\n",
       "      <td>0.1175</td>\n",
       "      <td>-0.0832</td>\n",
       "      <td>-0.0258</td>\n",
       "      <td>0.0567</td>\n",
       "      <td>0.0323</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>INTC.O</th>\n",
       "      <td>0.9519</td>\n",
       "      <td>0.0579</td>\n",
       "      <td>0.0490</td>\n",
       "      <td>-0.0772</td>\n",
       "      <td>-0.0373</td>\n",
       "      <td>0.0449</td>\n",
       "      <td>0.0112</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AMZN.O</th>\n",
       "      <td>0.9799</td>\n",
       "      <td>-0.0134</td>\n",
       "      <td>0.0206</td>\n",
       "      <td>0.0007</td>\n",
       "      <td>0.0525</td>\n",
       "      <td>-0.0452</td>\n",
       "      <td>0.0056</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GS.N</th>\n",
       "      <td>0.9806</td>\n",
       "      <td>0.0342</td>\n",
       "      <td>-0.0172</td>\n",
       "      <td>0.0042</td>\n",
       "      <td>-0.0387</td>\n",
       "      <td>0.0585</td>\n",
       "      <td>-0.0215</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>SPY</th>\n",
       "      <td>0.9692</td>\n",
       "      <td>0.0067</td>\n",
       "      <td>0.0228</td>\n",
       "      <td>-0.0244</td>\n",
       "      <td>-0.0237</td>\n",
       "      <td>0.0379</td>\n",
       "      <td>0.0121</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>.SPX</th>\n",
       "      <td>0.9672</td>\n",
       "      <td>0.0106</td>\n",
       "      <td>0.0219</td>\n",
       "      <td>-0.0252</td>\n",
       "      <td>-0.0318</td>\n",
       "      <td>0.0515</td>\n",
       "      <td>0.0063</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>.VIX</th>\n",
       "      <td>0.8823</td>\n",
       "      <td>0.0591</td>\n",
       "      <td>-0.0289</td>\n",
       "      <td>0.0284</td>\n",
       "      <td>-0.0256</td>\n",
       "      <td>0.0511</td>\n",
       "      <td>0.0306</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>EUR=</th>\n",
       "      <td>0.9859</td>\n",
       "      <td>0.0239</td>\n",
       "      <td>-0.0484</td>\n",
       "      <td>0.0508</td>\n",
       "      <td>-0.0217</td>\n",
       "      <td>0.0149</td>\n",
       "      <td>-0.0055</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>XAU=</th>\n",
       "      <td>0.9864</td>\n",
       "      <td>0.0069</td>\n",
       "      <td>0.0166</td>\n",
       "      <td>-0.0215</td>\n",
       "      <td>0.0044</td>\n",
       "      <td>0.0198</td>\n",
       "      <td>-0.0125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GDX</th>\n",
       "      <td>0.9765</td>\n",
       "      <td>0.0096</td>\n",
       "      <td>-0.0039</td>\n",
       "      <td>0.0223</td>\n",
       "      <td>-0.0364</td>\n",
       "      <td>0.0379</td>\n",
       "      <td>-0.0065</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GLD</th>\n",
       "      <td>0.9766</td>\n",
       "      <td>0.0246</td>\n",
       "      <td>0.0060</td>\n",
       "      <td>-0.0142</td>\n",
       "      <td>-0.0047</td>\n",
       "      <td>0.0223</td>\n",
       "      <td>-0.0106</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         lag_1   lag_2   lag_3   lag_4   lag_5   lag_6   lag_7\n",
       "AAPL.O  1.0106 -0.0592  0.0258  0.0535 -0.0172  0.0060 -0.0184\n",
       "MSFT.O  0.8928  0.0112  0.1175 -0.0832 -0.0258  0.0567  0.0323\n",
       "INTC.O  0.9519  0.0579  0.0490 -0.0772 -0.0373  0.0449  0.0112\n",
       "AMZN.O  0.9799 -0.0134  0.0206  0.0007  0.0525 -0.0452  0.0056\n",
       "GS.N    0.9806  0.0342 -0.0172  0.0042 -0.0387  0.0585 -0.0215\n",
       "SPY     0.9692  0.0067  0.0228 -0.0244 -0.0237  0.0379  0.0121\n",
       ".SPX    0.9672  0.0106  0.0219 -0.0252 -0.0318  0.0515  0.0063\n",
       ".VIX    0.8823  0.0591 -0.0289  0.0284 -0.0256  0.0511  0.0306\n",
       "EUR=    0.9859  0.0239 -0.0484  0.0508 -0.0217  0.0149 -0.0055\n",
       "XAU=    0.9864  0.0069  0.0166 -0.0215  0.0044  0.0198 -0.0125\n",
       "GDX     0.9765  0.0096 -0.0039  0.0223 -0.0364  0.0379 -0.0065\n",
       "GLD     0.9766  0.0246  0.0060 -0.0142 -0.0047  0.0223 -0.0106"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "regd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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iL///e9lPkl18h7OpRseHo7u7u4YGhoq91GqQnd3d7mPMK7E1B489dRT5T5CVXjppZfiO9/5Tlx++eXR1dUVERGdnZ1x9tlnl/lkle/xxx+PM844Iy666KLo6uqKefPmRWtra/ziF78o99GqwuDg4Kh/nnjiiRgcHIyf//zn5T5aVXjooYciIuKf//xnLFiwIE444YQ444wz4rnnnivzyarDNddcEy+++GJ0dXXFmWeeGV/72tdi7ty58eSTT5b7aBXvK1/5Slx88cXxxBNPlPso40JMRcQTTzzxof/87/9o2LOVK1fGWWedFaeeempcd9118cILL8Tpp58ehx56aLmPVvF+85vfxC233BLz58+PK664Iu677754+umn49lnny330arCnDlzorm5OebMmRNz5syJlStXxpw5c2LVqlXlPlpVePDBByMi4qc//WksXLgwNm3aFCtXrox77723zCerDpMnT45Zs2bFgw8+GHfeeWf86U9/is7Ozujs7Cz30SrerFmz4oc//GG8/PLLccEFF8TPfvazGBwcLPexSlZb7gNUgmXLlsXUqVP/6xb39u3by3Si6nL88cfHl770pYiI+MIXvhDXXXddnH/++VFTU1Pmk1W+E088MY477rg47rjj4vnnn4/p06dHRMSnPvWpMp+sOqxYsSK2bdsWbW1tUVtbG6tXr45FixbF7bffXu6jVZUJEybEKaecEhERTU1NMWvWrDKfqDocffTRERFxxBFHxCc/+cmIiKivrx/575jdq6mpifr6+liwYEGcd9558Yc//CEuv/zymDFjRlx55ZXlPt5HJqYi4rLLLovDDz88Pv/5z4/6uP8hj01vb+/Ir+vq6qKjoyOuvfZar1sZgxdeeCHeeOONOOqoo6KtrW3k42+88UYZT1U9zjrrrNi2bVtce+21sXjx4pGA//rXv17mk1WHd999N7q7u6Onpyd27twZDQ0N8d5778Xrr79e7qNVheHh4VizZk0MDw/HqlWr4qSTToquri77fUQ1NTVx2mmnxWmnnRZbtmwp93FK4mm+iPjiF78Yn/jEJ/7r49/97nfLcJrqUygUYuXKlSOPP/axj0V7e3t85jOfKeOpqsO8efPiz3/+c0REHHLIIRERcffdd8fHP/7xch6rqsycOTOuvfbauP/+++Oll16KiIjDDz+8zKeqDt/4xjfi6aefjlmzZsWuXbsiIuLWW2+NT3/602U+WXX45je/GRERTz75ZPz2t7+NW2+9NbZv316Vd1b2tWOOOSYeffTR//r4scceW4bT5NUM+/GNMdmyZUvV/iFXAvuVznZj9793+T7Ifjn2y7Ff6appO3emxqhabz1WCvuVznZj958hFWG/LPvl2K901bSdmBojN/By7Fc62+XYL8d+OfYrXTVtJ6bGyE+m5divdLbLsV+O/XLsV7pq2k5MjVE1FXIlsl/pbJdjvxz75divdNW0nZj6gD39OPpxxx23D09SnexXOtvl2C/Hfjn2K93+sp2f5vuAJUuWxGmnnTbqY9OnT4/m5uYynai62K90tsuxX479cuxXuv1lO2/a+QFDQ0Px1FNPxTHHHBNdXV3xr3/9KyZOnBh//OMf43vf+165j1fx7Fc62+XYL8d+OfYr3X6z3TAjbr/99lGP77zzzuHh4eHhn/zkJ+U4TtWxX+lsl2O/HPvl2K90+8t2XjP1AS+//PKox1u3bo2IiNpaN/DGwn6ls12O/XLsl2O/0u0v21XXafeymTNnxvz582P69Onxt7/9Lc4666zYtGlTvPjii+U+WlWwX+lsl2O/HPvl2K90+8t2XoD+H1588cXYtm1bzJw509+cXgL7lc52OfbLsV+O/Uq3P2wnpvbgV7/6VXz1q18t9zGqlv1KZ7sc++XYL8d+pavW7cTUBzz88MNx2223RV9fXxxyyCHxzjvvxDPPPFPuY1UN+5XOdjn2y7Ffjv1Kt79s5wXoH7Bp06Z49NFH41vf+lY8+eSTccEFF5T7SFXFfqWzXY79cuyXY7/S7S/biakPOOqoo+Kggw6KoaGhiIh48803y3yi6mK/0tkux3459suxX+n2l+38NN8HPPfcc/HYY49FXV1dnHfeeVX19wJVAvuVznY59suxX479Sre/bOc1Ux/i/fffj8cffzy2bt0aixcvLvdxqo79Sme7HPvl2C/HfqWr9u3EVER87nOfi8mTJ4/62PDwcAwMDMTTTz9dplNVD/uVznY59suxX479Srffbbfv3my9cj300EMf6eOMZr/S2S7Hfjn2y7Ff6fa37dyZAgBI8NN8AAAJYgoAIEFMAQAkiCkAgAQxBQCQ8P8BoZF3Jb+LkVQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "regd.mean().plot(kind='bar', figsize=(10, 6));"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>GLD</th>\n",
       "      <th>lag_1</th>\n",
       "      <th>lag_2</th>\n",
       "      <th>lag_3</th>\n",
       "      <th>lag_4</th>\n",
       "      <th>lag_5</th>\n",
       "      <th>lag_6</th>\n",
       "      <th>lag_7</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>GLD</th>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9893</td>\n",
       "      <td>0.9867</td>\n",
       "      <td>0.9841</td>\n",
       "      <td>0.9815</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_1</th>\n",
       "      <td>0.9972</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9893</td>\n",
       "      <td>0.9867</td>\n",
       "      <td>0.9842</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_2</th>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9893</td>\n",
       "      <td>0.9867</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_3</th>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9893</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_4</th>\n",
       "      <td>0.9893</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_5</th>\n",
       "      <td>0.9867</td>\n",
       "      <td>0.9893</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>0.9946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_6</th>\n",
       "      <td>0.9841</td>\n",
       "      <td>0.9867</td>\n",
       "      <td>0.9893</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>0.9972</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_7</th>\n",
       "      <td>0.9815</td>\n",
       "      <td>0.9842</td>\n",
       "      <td>0.9867</td>\n",
       "      <td>0.9893</td>\n",
       "      <td>0.9920</td>\n",
       "      <td>0.9946</td>\n",
       "      <td>0.9972</td>\n",
       "      <td>1.0000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          GLD   lag_1   lag_2   lag_3   lag_4   lag_5   lag_6   lag_7\n",
       "GLD    1.0000  0.9972  0.9946  0.9920  0.9893  0.9867  0.9841  0.9815\n",
       "lag_1  0.9972  1.0000  0.9972  0.9946  0.9920  0.9893  0.9867  0.9842\n",
       "lag_2  0.9946  0.9972  1.0000  0.9972  0.9946  0.9920  0.9893  0.9867\n",
       "lag_3  0.9920  0.9946  0.9972  1.0000  0.9972  0.9946  0.9920  0.9893\n",
       "lag_4  0.9893  0.9920  0.9946  0.9972  1.0000  0.9972  0.9946  0.9920\n",
       "lag_5  0.9867  0.9893  0.9920  0.9946  0.9972  1.0000  0.9972  0.9946\n",
       "lag_6  0.9841  0.9867  0.9893  0.9920  0.9946  0.9972  1.0000  0.9972\n",
       "lag_7  0.9815  0.9842  0.9867  0.9893  0.9920  0.9946  0.9972  1.0000"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfs[sym].corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "from statsmodels.tsa.stattools import adfuller"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-1.9488969577009954,\n",
       " 0.3094193074034718,\n",
       " 0,\n",
       " 2515,\n",
       " {'1%': -3.4329527780962255,\n",
       "  '5%': -2.8626898965523724,\n",
       "  '10%': -2.567382133955709},\n",
       " 8446.683102944744)"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adfuller(data[sym].dropna())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Market Prediction Based on Returns Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "rets = np.log(data / data.shift(1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "rets.dropna(inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfs = {}\n",
    "for sym in data:\n",
    "    df, cols = add_lags(rets, sym, lags)\n",
    "    mu, std = df[cols].mean(), df[cols].std()\n",
    "    df[cols] = (df[cols] - mu) / std\n",
    "    dfs[sym] = df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>GLD</th>\n",
       "      <th>lag_1</th>\n",
       "      <th>lag_2</th>\n",
       "      <th>lag_3</th>\n",
       "      <th>lag_4</th>\n",
       "      <th>lag_5</th>\n",
       "      <th>lag_6</th>\n",
       "      <th>lag_7</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010-01-14</th>\n",
       "      <td>0.0044</td>\n",
       "      <td>0.9570</td>\n",
       "      <td>-2.1692</td>\n",
       "      <td>1.3386</td>\n",
       "      <td>0.4959</td>\n",
       "      <td>-0.6434</td>\n",
       "      <td>1.6613</td>\n",
       "      <td>-0.1028</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-15</th>\n",
       "      <td>-0.0105</td>\n",
       "      <td>0.4379</td>\n",
       "      <td>0.9571</td>\n",
       "      <td>-2.1689</td>\n",
       "      <td>1.3388</td>\n",
       "      <td>0.4966</td>\n",
       "      <td>-0.6436</td>\n",
       "      <td>1.6614</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-19</th>\n",
       "      <td>0.0059</td>\n",
       "      <td>-1.0842</td>\n",
       "      <td>0.4385</td>\n",
       "      <td>0.9562</td>\n",
       "      <td>-2.1690</td>\n",
       "      <td>1.3395</td>\n",
       "      <td>0.4958</td>\n",
       "      <td>-0.6435</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-20</th>\n",
       "      <td>-0.0234</td>\n",
       "      <td>0.5967</td>\n",
       "      <td>-1.0823</td>\n",
       "      <td>0.4378</td>\n",
       "      <td>0.9564</td>\n",
       "      <td>-2.1686</td>\n",
       "      <td>1.3383</td>\n",
       "      <td>0.4958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-01-21</th>\n",
       "      <td>-0.0145</td>\n",
       "      <td>-2.4045</td>\n",
       "      <td>0.5971</td>\n",
       "      <td>-1.0825</td>\n",
       "      <td>0.4379</td>\n",
       "      <td>0.9571</td>\n",
       "      <td>-2.1680</td>\n",
       "      <td>1.3384</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               GLD   lag_1   lag_2   lag_3   lag_4   lag_5   lag_6   lag_7\n",
       "Date                                                                      \n",
       "2010-01-14  0.0044  0.9570 -2.1692  1.3386  0.4959 -0.6434  1.6613 -0.1028\n",
       "2010-01-15 -0.0105  0.4379  0.9571 -2.1689  1.3388  0.4966 -0.6436  1.6614\n",
       "2010-01-19  0.0059 -1.0842  0.4385  0.9562 -2.1690  1.3395  0.4958 -0.6435\n",
       "2010-01-20 -0.0234  0.5967 -1.0823  0.4378  0.9564 -2.1686  1.3383  0.4958\n",
       "2010-01-21 -0.0145 -2.4045  0.5971 -1.0825  0.4379  0.9571 -2.1680  1.3384"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfs[sym].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-51.568251505825536,\n",
       " 0.0,\n",
       " 0,\n",
       " 2507,\n",
       " {'1%': -3.4329610922579095,\n",
       "  '5%': -2.8626935681060375,\n",
       "  '10%': -2.567384088736619},\n",
       " 7017.165474260225)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "adfuller(dfs[sym]['lag_1'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>GLD</th>\n",
       "      <th>lag_1</th>\n",
       "      <th>lag_2</th>\n",
       "      <th>lag_3</th>\n",
       "      <th>lag_4</th>\n",
       "      <th>lag_5</th>\n",
       "      <th>lag_6</th>\n",
       "      <th>lag_7</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>GLD</th>\n",
       "      <td>1.0000</td>\n",
       "      <td>-0.0297</td>\n",
       "      <td>0.0003</td>\n",
       "      <td>1.2635e-02</td>\n",
       "      <td>-0.0026</td>\n",
       "      <td>-5.9392e-03</td>\n",
       "      <td>0.0099</td>\n",
       "      <td>-0.0013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_1</th>\n",
       "      <td>-0.0297</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>-0.0305</td>\n",
       "      <td>8.1418e-04</td>\n",
       "      <td>0.0128</td>\n",
       "      <td>-2.8765e-03</td>\n",
       "      <td>-0.0053</td>\n",
       "      <td>0.0098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_2</th>\n",
       "      <td>0.0003</td>\n",
       "      <td>-0.0305</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>-3.1617e-02</td>\n",
       "      <td>0.0003</td>\n",
       "      <td>1.3234e-02</td>\n",
       "      <td>-0.0043</td>\n",
       "      <td>-0.0052</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_3</th>\n",
       "      <td>0.0126</td>\n",
       "      <td>0.0008</td>\n",
       "      <td>-0.0316</td>\n",
       "      <td>1.0000e+00</td>\n",
       "      <td>-0.0313</td>\n",
       "      <td>-6.8542e-06</td>\n",
       "      <td>0.0141</td>\n",
       "      <td>-0.0044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_4</th>\n",
       "      <td>-0.0026</td>\n",
       "      <td>0.0128</td>\n",
       "      <td>0.0003</td>\n",
       "      <td>-3.1329e-02</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>-3.1761e-02</td>\n",
       "      <td>0.0002</td>\n",
       "      <td>0.0141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_5</th>\n",
       "      <td>-0.0059</td>\n",
       "      <td>-0.0029</td>\n",
       "      <td>0.0132</td>\n",
       "      <td>-6.8542e-06</td>\n",
       "      <td>-0.0318</td>\n",
       "      <td>1.0000e+00</td>\n",
       "      <td>-0.0323</td>\n",
       "      <td>0.0002</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_6</th>\n",
       "      <td>0.0099</td>\n",
       "      <td>-0.0053</td>\n",
       "      <td>-0.0043</td>\n",
       "      <td>1.4115e-02</td>\n",
       "      <td>0.0002</td>\n",
       "      <td>-3.2289e-02</td>\n",
       "      <td>1.0000</td>\n",
       "      <td>-0.0324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>lag_7</th>\n",
       "      <td>-0.0013</td>\n",
       "      <td>0.0098</td>\n",
       "      <td>-0.0052</td>\n",
       "      <td>-4.3869e-03</td>\n",
       "      <td>0.0141</td>\n",
       "      <td>2.1707e-04</td>\n",
       "      <td>-0.0324</td>\n",
       "      <td>1.0000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          GLD   lag_1   lag_2       lag_3   lag_4       lag_5   lag_6   lag_7\n",
       "GLD    1.0000 -0.0297  0.0003  1.2635e-02 -0.0026 -5.9392e-03  0.0099 -0.0013\n",
       "lag_1 -0.0297  1.0000 -0.0305  8.1418e-04  0.0128 -2.8765e-03 -0.0053  0.0098\n",
       "lag_2  0.0003 -0.0305  1.0000 -3.1617e-02  0.0003  1.3234e-02 -0.0043 -0.0052\n",
       "lag_3  0.0126  0.0008 -0.0316  1.0000e+00 -0.0313 -6.8542e-06  0.0141 -0.0044\n",
       "lag_4 -0.0026  0.0128  0.0003 -3.1329e-02  1.0000 -3.1761e-02  0.0002  0.0141\n",
       "lag_5 -0.0059 -0.0029  0.0132 -6.8542e-06 -0.0318  1.0000e+00 -0.0323  0.0002\n",
       "lag_6  0.0099 -0.0053 -0.0043  1.4115e-02  0.0002 -3.2289e-02  1.0000 -0.0324\n",
       "lag_7 -0.0013  0.0098 -0.0052 -4.3869e-03  0.0141  2.1707e-04 -0.0324  1.0000"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dfs[sym].corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import accuracy_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OLS | AAPL.O     | acc=0.5056\n",
      "OLS | MSFT.O     | acc=0.5088\n",
      "OLS | INTC.O     | acc=0.5040\n",
      "OLS | AMZN.O     | acc=0.5048\n",
      "OLS | GS.N       | acc=0.5080\n",
      "OLS | SPY        | acc=0.5080\n",
      "OLS | .SPX       | acc=0.5167\n",
      "OLS | .VIX       | acc=0.5291\n",
      "OLS | EUR=       | acc=0.4984\n",
      "OLS | XAU=       | acc=0.5207\n",
      "OLS | GDX        | acc=0.5307\n",
      "OLS | GLD        | acc=0.5072\n",
      "CPU times: user 107 ms, sys: 35.7 ms, total: 143 ms\n",
      "Wall time: 41.8 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for sym in data:\n",
    "    df = dfs[sym]\n",
    "    reg = np.linalg.lstsq(df[cols], df[sym], rcond=-1)[0]\n",
    "    pred = np.dot(df[cols], reg)\n",
    "    acc = accuracy_score(np.sign(df[sym]), np.sign(pred))\n",
    "    print(f'OLS | {sym:10s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neural_network import MLPRegressor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MLP | AAPL.O     | acc=0.6005\n",
      "MLP | MSFT.O     | acc=0.5853\n",
      "MLP | INTC.O     | acc=0.5766\n",
      "MLP | AMZN.O     | acc=0.5510\n",
      "MLP | GS.N       | acc=0.6527\n",
      "MLP | SPY        | acc=0.5419\n",
      "MLP | .SPX       | acc=0.5399\n",
      "MLP | .VIX       | acc=0.6579\n",
      "MLP | EUR=       | acc=0.5642\n",
      "MLP | XAU=       | acc=0.5522\n",
      "MLP | GDX        | acc=0.6029\n",
      "MLP | GLD        | acc=0.5259\n",
      "CPU times: user 39 s, sys: 8.9 s, total: 47.9 s\n",
      "Wall time: 13.4 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for sym in data.columns:\n",
    "    df = dfs[sym]\n",
    "    model = MLPRegressor(hidden_layer_sizes=[512],\n",
    "                         random_state=100,\n",
    "                         max_iter=1000,\n",
    "                         early_stopping=True,\n",
    "                         validation_fraction=0.15,\n",
    "                         shuffle=False)\n",
    "    model.fit(df[cols], df[sym])\n",
    "    pred = model.predict(df[cols])\n",
    "    acc = accuracy_score(np.sign(df[sym]), np.sign(pred))\n",
    "    print(f'MLP | {sym:10s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf\n",
    "from keras.layers import Dense\n",
    "from keras.models import Sequential"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(100)\n",
    "tf.random.set_seed(100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "def create_model(problem='regression'):\n",
    "    model = Sequential()\n",
    "    model.add(Dense(512, input_dim=len(cols),\n",
    "                    activation='relu'))\n",
    "    if problem == 'regression':\n",
    "        model.add(Dense(1, activation='linear'))\n",
    "        model.compile(loss='mse', optimizer='adam')\n",
    "    else:\n",
    "        model.add(Dense(1, activation='sigmoid'))\n",
    "        model.compile(loss='binary_crossentropy', optimizer='adam')\n",
    "    return model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DNN | AAPL.O     | acc=0.6085\n",
      "DNN | MSFT.O     | acc=0.6152\n",
      "DNN | INTC.O     | acc=0.6236\n",
      "DNN | AMZN.O     | acc=0.6276\n",
      "DNN | GS.N       | acc=0.6136\n",
      "DNN | SPY        | acc=0.5594\n",
      "DNN | .SPX       | acc=0.5478\n",
      "DNN | .VIX       | acc=0.6148\n",
      "DNN | EUR=       | acc=0.5817\n",
      "DNN | XAU=       | acc=0.6021\n",
      "DNN | GDX        | acc=0.6120\n",
      "DNN | GLD        | acc=0.6001\n",
      "CPU times: user 33.6 s, sys: 10.2 s, total: 43.8 s\n",
      "Wall time: 22.9 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for sym in data.columns[:]:\n",
    "    df = dfs[sym]\n",
    "    model = create_model()\n",
    "    model.fit(df[cols], df[sym], epochs=25, verbose=False)\n",
    "    pred = model.predict(df[cols])\n",
    "    acc = accuracy_score(np.sign(df[sym]), np.sign(pred))\n",
    "    print(f'DNN | {sym:10s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "split = int(len(dfs[sym]) * 0.8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OLS | AAPL.O     | acc=0.5219\n",
      "OLS | MSFT.O     | acc=0.4960\n",
      "OLS | INTC.O     | acc=0.5418\n",
      "OLS | AMZN.O     | acc=0.4841\n",
      "OLS | GS.N       | acc=0.4980\n",
      "OLS | SPY        | acc=0.5020\n",
      "OLS | .SPX       | acc=0.5120\n",
      "OLS | .VIX       | acc=0.5458\n",
      "OLS | EUR=       | acc=0.4482\n",
      "OLS | XAU=       | acc=0.5299\n",
      "OLS | GDX        | acc=0.5159\n",
      "OLS | GLD        | acc=0.5100\n",
      "CPU times: user 76.7 ms, sys: 16 ms, total: 92.7 ms\n",
      "Wall time: 73.3 ms\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for sym in data.columns:\n",
    "    df = dfs[sym]\n",
    "    train = df.iloc[:split]\n",
    "    reg = np.linalg.lstsq(train[cols], train[sym], rcond=-1)[0]\n",
    "    test = df.iloc[split:]\n",
    "    pred = np.dot(test[cols], reg)\n",
    "    acc = accuracy_score(np.sign(test[sym]), np.sign(pred))\n",
    "    print(f'OLS | {sym:10s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MLP | AAPL.O     | acc=0.4920\n",
      "MLP | MSFT.O     | acc=0.5279\n",
      "MLP | INTC.O     | acc=0.5279\n",
      "MLP | AMZN.O     | acc=0.4641\n",
      "MLP | GS.N       | acc=0.5040\n",
      "MLP | SPY        | acc=0.5259\n",
      "MLP | .SPX       | acc=0.5478\n",
      "MLP | .VIX       | acc=0.5279\n",
      "MLP | EUR=       | acc=0.4980\n",
      "MLP | XAU=       | acc=0.5239\n",
      "MLP | GDX        | acc=0.4880\n",
      "MLP | GLD        | acc=0.5000\n",
      "CPU times: user 35.7 s, sys: 8.88 s, total: 44.6 s\n",
      "Wall time: 14.5 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for sym in data.columns:\n",
    "    df = dfs[sym]\n",
    "    train = df.iloc[:split]\n",
    "    model = MLPRegressor(hidden_layer_sizes=[512],\n",
    "                         random_state=100,\n",
    "                         max_iter=1000,\n",
    "                         early_stopping=True,\n",
    "                         validation_fraction=0.15,\n",
    "                         shuffle=False)\n",
    "    model.fit(train[cols], train[sym])\n",
    "    test = df.iloc[split:]\n",
    "    pred = model.predict(test[cols])\n",
    "    acc = accuracy_score(np.sign(test[sym]), np.sign(pred))\n",
    "    print(f'MLP | {sym:10s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DNN | AAPL.O     | acc=0.4522\n",
      "DNN | MSFT.O     | acc=0.5040\n",
      "DNN | INTC.O     | acc=0.4900\n",
      "DNN | AMZN.O     | acc=0.5000\n",
      "DNN | GS.N       | acc=0.5259\n",
      "DNN | SPY        | acc=0.5398\n",
      "DNN | .SPX       | acc=0.5339\n",
      "DNN | .VIX       | acc=0.5020\n",
      "DNN | EUR=       | acc=0.5060\n",
      "DNN | XAU=       | acc=0.4861\n",
      "DNN | GDX        | acc=0.4761\n",
      "DNN | GLD        | acc=0.4880\n",
      "CPU times: user 41.2 s, sys: 13.2 s, total: 54.4 s\n",
      "Wall time: 25 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for sym in data.columns:\n",
    "    df = dfs[sym]\n",
    "    train = df.iloc[:split]\n",
    "    model = create_model()\n",
    "    model.fit(train[cols], train[sym], epochs=50, verbose=False)\n",
    "    test = df.iloc[split:]\n",
    "    pred = model.predict(test[cols])\n",
    "    acc = accuracy_score(np.sign(test[sym]), np.sign(pred))\n",
    "    print(f'DNN | {sym:10s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Market Prediction With More Features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "url = 'http://hilpisch.com/aiif_eikon_eod_data.csv'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(url, index_col=0, parse_dates=True).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_lags(data, ric, lags, window=50):\n",
    "    cols = []\n",
    "    df = pd.DataFrame(data[ric])\n",
    "    df.dropna(inplace=True)\n",
    "    df['r'] = np.log(df / df.shift())\n",
    "    df['sma'] = df[ric].rolling(window).mean()\n",
    "    df['min'] = df[ric].rolling(window).min()\n",
    "    df['max'] = df[ric].rolling(window).max()\n",
    "    df['mom'] = df['r'].rolling(window).mean()\n",
    "    df['vol'] = df['r'].rolling(window).std()\n",
    "    df.dropna(inplace=True)\n",
    "    df['d'] = np.where(df['r'] > 0, 1, 0)\n",
    "    features = [ric, 'r', 'd', 'sma', 'min', 'max', 'mom', 'vol']\n",
    "    for f in features:\n",
    "        for lag in range(1, lags + 1):\n",
    "            col = f'{f}_lag_{lag}'\n",
    "            df[col] = df[f].shift(lag)\n",
    "            cols.append(col)\n",
    "    df.dropna(inplace=True)\n",
    "    return df, cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "lags = 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfs = {}\n",
    "for ric in data:\n",
    "    df, cols = add_lags(data, ric, lags)\n",
    "    dfs[ric] = df.dropna(), cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "40"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(cols)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.neural_network import MLPClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "IN-SAMPLE | AAPL.O  | acc=0.5510\n",
      "IN-SAMPLE | MSFT.O  | acc=0.5376\n",
      "IN-SAMPLE | INTC.O  | acc=0.5607\n",
      "IN-SAMPLE | AMZN.O  | acc=0.5559\n",
      "IN-SAMPLE | GS.N    | acc=0.5794\n",
      "IN-SAMPLE | SPY     | acc=0.5729\n",
      "IN-SAMPLE | .SPX    | acc=0.5941\n",
      "IN-SAMPLE | .VIX    | acc=0.6940\n",
      "IN-SAMPLE | EUR=    | acc=0.5766\n",
      "IN-SAMPLE | XAU=    | acc=0.5672\n",
      "IN-SAMPLE | GDX     | acc=0.5847\n",
      "IN-SAMPLE | GLD     | acc=0.5567\n",
      "CPU times: user 24.1 s, sys: 5.59 s, total: 29.7 s\n",
      "Wall time: 8.3 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for ric in data:\n",
    "    model = MLPClassifier(hidden_layer_sizes=[512],\n",
    "                          random_state=100,\n",
    "                          max_iter=1000,\n",
    "                          early_stopping=True,\n",
    "                          validation_fraction=0.15,\n",
    "                          shuffle=False)\n",
    "    df, cols = dfs[ric]\n",
    "    df[cols] = (df[cols] - df[cols].mean()) / df[cols].std()\n",
    "    model.fit(df[cols], df['d'])\n",
    "    pred = model.predict(df[cols])\n",
    "    acc = accuracy_score(df['d'], pred)\n",
    "    print(f'IN-SAMPLE | {ric:7s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "IN-SAMPLE | AAPL.O  | acc=0.7005\n",
      "IN-SAMPLE | MSFT.O  | acc=0.6973\n",
      "IN-SAMPLE | INTC.O  | acc=0.6928\n",
      "IN-SAMPLE | AMZN.O  | acc=0.6741\n",
      "IN-SAMPLE | GS.N    | acc=0.6932\n",
      "IN-SAMPLE | SPY     | acc=0.6818\n",
      "IN-SAMPLE | .SPX    | acc=0.6904\n",
      "IN-SAMPLE | .VIX    | acc=0.7383\n",
      "IN-SAMPLE | EUR=    | acc=0.6826\n",
      "IN-SAMPLE | XAU=    | acc=0.6997\n",
      "IN-SAMPLE | GDX     | acc=0.6851\n",
      "IN-SAMPLE | GLD     | acc=0.6985\n",
      "CPU times: user 1min 14s, sys: 20.9 s, total: 1min 35s\n",
      "Wall time: 49.8 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "for ric in data:\n",
    "    model = create_model('classification')\n",
    "    df, cols = dfs[ric]\n",
    "    df[cols] = (df[cols] - df[cols].mean()) / df[cols].std()\n",
    "    model.fit(df[cols], df['d'], epochs=50, verbose=False)\n",
    "    pred = np.where(model.predict(df[cols]) > 0.5, 1, 0)\n",
    "    acc = accuracy_score(df['d'], pred)\n",
    "    print(f'IN-SAMPLE | {ric:7s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_test_model(model):\n",
    "    for ric in data:\n",
    "        df, cols = dfs[ric]\n",
    "        split = int(len(df) * 0.85)\n",
    "        train = df.iloc[:split].copy()\n",
    "        mu, std = train[cols].mean(), train[cols].std()\n",
    "        train[cols] = (train[cols] - mu) / std\n",
    "        model.fit(train[cols], train['d'])\n",
    "        test = df.iloc[split:].copy() \n",
    "        test[cols] = (test[cols] - mu) / std\n",
    "        pred = model.predict(test[cols])\n",
    "        acc = accuracy_score(test['d'], pred)\n",
    "        print(f'OUT-OF-SAMPLE | {ric:7s} | acc={acc:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_mlp = MLPClassifier(hidden_layer_sizes=[512],\n",
    "                          random_state=100,\n",
    "                          max_iter=1000,\n",
    "                          early_stopping=True,\n",
    "                          validation_fraction=0.15,\n",
    "                          shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OUT-OF-SAMPLE | AAPL.O  | acc=0.4432\n",
      "OUT-OF-SAMPLE | MSFT.O  | acc=0.4595\n",
      "OUT-OF-SAMPLE | INTC.O  | acc=0.5000\n",
      "OUT-OF-SAMPLE | AMZN.O  | acc=0.5270\n",
      "OUT-OF-SAMPLE | GS.N    | acc=0.4838\n",
      "OUT-OF-SAMPLE | SPY     | acc=0.4811\n",
      "OUT-OF-SAMPLE | .SPX    | acc=0.5027\n",
      "OUT-OF-SAMPLE | .VIX    | acc=0.5676\n",
      "OUT-OF-SAMPLE | EUR=    | acc=0.4649\n",
      "OUT-OF-SAMPLE | XAU=    | acc=0.5514\n",
      "OUT-OF-SAMPLE | GDX     | acc=0.5162\n",
      "OUT-OF-SAMPLE | GLD     | acc=0.4946\n",
      "CPU times: user 16.2 s, sys: 4.61 s, total: 20.8 s\n",
      "Wall time: 7.33 s\n"
     ]
    }
   ],
   "source": [
    "%time train_test_model(model_mlp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import BaggingClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "base_estimator = MLPClassifier(hidden_layer_sizes=[256],\n",
    "                          random_state=100,\n",
    "                          max_iter=1000,\n",
    "                          early_stopping=True,\n",
    "                          validation_fraction=0.15,\n",
    "                          shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "model_bag = BaggingClassifier(base_estimator=base_estimator,\n",
    "                          n_estimators=35,\n",
    "                          max_samples=0.25,\n",
    "                          max_features=0.5,\n",
    "                          bootstrap=False,\n",
    "                          bootstrap_features=True,\n",
    "                          n_jobs=8,\n",
    "                          random_state=100\n",
    "                         )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OUT-OF-SAMPLE | AAPL.O  | acc=0.5000\n",
      "OUT-OF-SAMPLE | MSFT.O  | acc=0.5703\n",
      "OUT-OF-SAMPLE | INTC.O  | acc=0.5054\n",
      "OUT-OF-SAMPLE | AMZN.O  | acc=0.5270\n",
      "OUT-OF-SAMPLE | GS.N    | acc=0.5135\n",
      "OUT-OF-SAMPLE | SPY     | acc=0.5568\n",
      "OUT-OF-SAMPLE | .SPX    | acc=0.5514\n",
      "OUT-OF-SAMPLE | .VIX    | acc=0.5432\n",
      "OUT-OF-SAMPLE | EUR=    | acc=0.5054\n",
      "OUT-OF-SAMPLE | XAU=    | acc=0.5351\n",
      "OUT-OF-SAMPLE | GDX     | acc=0.5054\n",
      "OUT-OF-SAMPLE | GLD     | acc=0.5189\n",
      "CPU times: user 1.66 s, sys: 543 ms, total: 2.2 s\n",
      "Wall time: 15.7 s\n"
     ]
    }
   ],
   "source": [
    "%time train_test_model(model_bag)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Market Prediction Intraday"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "url = 'http://hilpisch.com/aiif_eikon_id_data.csv'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(url, index_col=0, parse_dates=True) # .dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>AAPL.O</th>\n",
       "      <th>MSFT.O</th>\n",
       "      <th>INTC.O</th>\n",
       "      <th>AMZN.O</th>\n",
       "      <th>GS.N</th>\n",
       "      <th>SPY</th>\n",
       "      <th>.SPX</th>\n",
       "      <th>.VIX</th>\n",
       "      <th>EUR=</th>\n",
       "      <th>XAU=</th>\n",
       "      <th>GDX</th>\n",
       "      <th>GLD</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2019-12-31 20:00:00</th>\n",
       "      <td>292.36</td>\n",
       "      <td>157.2845</td>\n",
       "      <td>59.575</td>\n",
       "      <td>1845.22</td>\n",
       "      <td>228.92</td>\n",
       "      <td>320.94</td>\n",
       "      <td>3219.75</td>\n",
       "      <td>14.16</td>\n",
       "      <td>1.1215</td>\n",
       "      <td>1519.6451</td>\n",
       "      <td>29.40</td>\n",
       "      <td>143.12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-12-31 21:00:00</th>\n",
       "      <td>293.37</td>\n",
       "      <td>157.4900</td>\n",
       "      <td>59.820</td>\n",
       "      <td>1846.95</td>\n",
       "      <td>229.89</td>\n",
       "      <td>321.89</td>\n",
       "      <td>3230.56</td>\n",
       "      <td>13.92</td>\n",
       "      <td>1.1216</td>\n",
       "      <td>1517.3600</td>\n",
       "      <td>29.29</td>\n",
       "      <td>142.93</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-12-31 22:00:00</th>\n",
       "      <td>293.82</td>\n",
       "      <td>157.9000</td>\n",
       "      <td>59.990</td>\n",
       "      <td>1850.20</td>\n",
       "      <td>229.93</td>\n",
       "      <td>322.39</td>\n",
       "      <td>3230.78</td>\n",
       "      <td>13.78</td>\n",
       "      <td>1.1210</td>\n",
       "      <td>1517.0100</td>\n",
       "      <td>29.30</td>\n",
       "      <td>142.90</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-12-31 23:00:00</th>\n",
       "      <td>293.75</td>\n",
       "      <td>157.8300</td>\n",
       "      <td>59.910</td>\n",
       "      <td>1851.00</td>\n",
       "      <td>NaN</td>\n",
       "      <td>322.22</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.1211</td>\n",
       "      <td>1516.8900</td>\n",
       "      <td>29.40</td>\n",
       "      <td>142.88</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2020-01-01 00:00:00</th>\n",
       "      <td>293.81</td>\n",
       "      <td>157.8800</td>\n",
       "      <td>59.870</td>\n",
       "      <td>1850.10</td>\n",
       "      <td>NaN</td>\n",
       "      <td>322.32</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.1211</td>\n",
       "      <td>NaN</td>\n",
       "      <td>29.34</td>\n",
       "      <td>143.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     AAPL.O    MSFT.O  INTC.O   AMZN.O    GS.N     SPY  \\\n",
       "Date                                                                     \n",
       "2019-12-31 20:00:00  292.36  157.2845  59.575  1845.22  228.92  320.94   \n",
       "2019-12-31 21:00:00  293.37  157.4900  59.820  1846.95  229.89  321.89   \n",
       "2019-12-31 22:00:00  293.82  157.9000  59.990  1850.20  229.93  322.39   \n",
       "2019-12-31 23:00:00  293.75  157.8300  59.910  1851.00     NaN  322.22   \n",
       "2020-01-01 00:00:00  293.81  157.8800  59.870  1850.10     NaN  322.32   \n",
       "\n",
       "                        .SPX   .VIX    EUR=       XAU=    GDX     GLD  \n",
       "Date                                                                   \n",
       "2019-12-31 20:00:00  3219.75  14.16  1.1215  1519.6451  29.40  143.12  \n",
       "2019-12-31 21:00:00  3230.56  13.92  1.1216  1517.3600  29.29  142.93  \n",
       "2019-12-31 22:00:00  3230.78  13.78  1.1210  1517.0100  29.30  142.90  \n",
       "2019-12-31 23:00:00      NaN    NaN  1.1211  1516.8900  29.40  142.88  \n",
       "2020-01-01 00:00:00      NaN    NaN  1.1211        NaN  29.34  143.00  "
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 5529 entries, 2019-03-01 00:00:00 to 2020-01-01 00:00:00\n",
      "Data columns (total 12 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   AAPL.O  3384 non-null   float64\n",
      " 1   MSFT.O  3378 non-null   float64\n",
      " 2   INTC.O  3275 non-null   float64\n",
      " 3   AMZN.O  3381 non-null   float64\n",
      " 4   GS.N    1686 non-null   float64\n",
      " 5   SPY     3388 non-null   float64\n",
      " 6   .SPX    1802 non-null   float64\n",
      " 7   .VIX    2959 non-null   float64\n",
      " 8   EUR=    5429 non-null   float64\n",
      " 9   XAU=    5149 non-null   float64\n",
      " 10  GDX     3173 non-null   float64\n",
      " 11  GLD     3351 non-null   float64\n",
      "dtypes: float64(12)\n",
      "memory usage: 561.5 KB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "lags = 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "dfs = {}\n",
    "for ric in data:\n",
    "    df, cols = add_lags(data, ric, lags)\n",
    "    dfs[ric] = df, cols"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OUT-OF-SAMPLE | AAPL.O  | acc=0.5420\n",
      "OUT-OF-SAMPLE | MSFT.O  | acc=0.4930\n",
      "OUT-OF-SAMPLE | INTC.O  | acc=0.5549\n",
      "OUT-OF-SAMPLE | AMZN.O  | acc=0.4709\n",
      "OUT-OF-SAMPLE | GS.N    | acc=0.5184\n",
      "OUT-OF-SAMPLE | SPY     | acc=0.4860\n",
      "OUT-OF-SAMPLE | .SPX    | acc=0.5019\n",
      "OUT-OF-SAMPLE | .VIX    | acc=0.4885\n",
      "OUT-OF-SAMPLE | EUR=    | acc=0.5130\n",
      "OUT-OF-SAMPLE | XAU=    | acc=0.4824\n",
      "OUT-OF-SAMPLE | GDX     | acc=0.4765\n",
      "OUT-OF-SAMPLE | GLD     | acc=0.5455\n",
      "CPU times: user 23.3 s, sys: 6.52 s, total: 29.8 s\n",
      "Wall time: 11.6 s\n"
     ]
    }
   ],
   "source": [
    "%time train_test_model(model_mlp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "OUT-OF-SAMPLE | AAPL.O  | acc=0.5660\n",
      "OUT-OF-SAMPLE | MSFT.O  | acc=0.5551\n",
      "OUT-OF-SAMPLE | INTC.O  | acc=0.5072\n",
      "OUT-OF-SAMPLE | AMZN.O  | acc=0.4830\n",
      "OUT-OF-SAMPLE | GS.N    | acc=0.5020\n",
      "OUT-OF-SAMPLE | SPY     | acc=0.4680\n",
      "OUT-OF-SAMPLE | .SPX    | acc=0.4677\n",
      "OUT-OF-SAMPLE | .VIX    | acc=0.5161\n",
      "OUT-OF-SAMPLE | EUR=    | acc=0.5242\n",
      "OUT-OF-SAMPLE | XAU=    | acc=0.5229\n",
      "OUT-OF-SAMPLE | GDX     | acc=0.5107\n",
      "OUT-OF-SAMPLE | GLD     | acc=0.5475\n",
      "CPU times: user 1.94 s, sys: 572 ms, total: 2.51 s\n",
      "Wall time: 19.4 s\n"
     ]
    }
   ],
   "source": [
    "%time train_test_model(model_bag)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src='http://hilpisch.com/taim_logo.png' width=\"350px\" align=\"right\">\n",
    "\n",
    "<br><br><br><a href=\"http://tpq.io\" target=\"_blank\">http://tpq.io</a> | <a href=\"http://twitter.com/dyjh\" target=\"_blank\">@dyjh</a> | <a href=\"mailto:ai@tpq.io\">ai@tpq.io</a>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
